↳ Prolog
↳ PrologToPiTRSProof
minus_in_gaa(X, Y, Z) → U2_gaa(X, Y, Z, le_in_gaa(X, Y, B))
le_in_gaa(0, Y, true) → le_out_gaa(0, Y, true)
le_in_gaa(s(X), 0, false) → le_out_gaa(s(X), 0, false)
le_in_gaa(s(X), s(Y), B) → U1_gaa(X, Y, B, le_in_gaa(X, Y, B))
U1_gaa(X, Y, B, le_out_gaa(X, Y, B)) → le_out_gaa(s(X), s(Y), B)
U2_gaa(X, Y, Z, le_out_gaa(X, Y, B)) → U3_gaa(X, Y, Z, if_in_ggaa(B, X, Y, Z))
if_in_ggaa(true, X, Y, 0) → if_out_ggaa(true, X, Y, 0)
if_in_ggaa(false, X, Y, s(Z)) → U4_ggaa(X, Y, Z, p_in_ga(X, X1))
p_in_ga(0, 0) → p_out_ga(0, 0)
p_in_ga(s(X), X) → p_out_ga(s(X), X)
U4_ggaa(X, Y, Z, p_out_ga(X, X1)) → U5_ggaa(X, Y, Z, minus_in_gaa(X1, Y, Z))
U5_ggaa(X, Y, Z, minus_out_gaa(X1, Y, Z)) → if_out_ggaa(false, X, Y, s(Z))
U3_gaa(X, Y, Z, if_out_ggaa(B, X, Y, Z)) → minus_out_gaa(X, Y, Z)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
minus_in_gaa(X, Y, Z) → U2_gaa(X, Y, Z, le_in_gaa(X, Y, B))
le_in_gaa(0, Y, true) → le_out_gaa(0, Y, true)
le_in_gaa(s(X), 0, false) → le_out_gaa(s(X), 0, false)
le_in_gaa(s(X), s(Y), B) → U1_gaa(X, Y, B, le_in_gaa(X, Y, B))
U1_gaa(X, Y, B, le_out_gaa(X, Y, B)) → le_out_gaa(s(X), s(Y), B)
U2_gaa(X, Y, Z, le_out_gaa(X, Y, B)) → U3_gaa(X, Y, Z, if_in_ggaa(B, X, Y, Z))
if_in_ggaa(true, X, Y, 0) → if_out_ggaa(true, X, Y, 0)
if_in_ggaa(false, X, Y, s(Z)) → U4_ggaa(X, Y, Z, p_in_ga(X, X1))
p_in_ga(0, 0) → p_out_ga(0, 0)
p_in_ga(s(X), X) → p_out_ga(s(X), X)
U4_ggaa(X, Y, Z, p_out_ga(X, X1)) → U5_ggaa(X, Y, Z, minus_in_gaa(X1, Y, Z))
U5_ggaa(X, Y, Z, minus_out_gaa(X1, Y, Z)) → if_out_ggaa(false, X, Y, s(Z))
U3_gaa(X, Y, Z, if_out_ggaa(B, X, Y, Z)) → minus_out_gaa(X, Y, Z)
MINUS_IN_GAA(X, Y, Z) → U2_GAA(X, Y, Z, le_in_gaa(X, Y, B))
MINUS_IN_GAA(X, Y, Z) → LE_IN_GAA(X, Y, B)
LE_IN_GAA(s(X), s(Y), B) → U1_GAA(X, Y, B, le_in_gaa(X, Y, B))
LE_IN_GAA(s(X), s(Y), B) → LE_IN_GAA(X, Y, B)
U2_GAA(X, Y, Z, le_out_gaa(X, Y, B)) → U3_GAA(X, Y, Z, if_in_ggaa(B, X, Y, Z))
U2_GAA(X, Y, Z, le_out_gaa(X, Y, B)) → IF_IN_GGAA(B, X, Y, Z)
IF_IN_GGAA(false, X, Y, s(Z)) → U4_GGAA(X, Y, Z, p_in_ga(X, X1))
IF_IN_GGAA(false, X, Y, s(Z)) → P_IN_GA(X, X1)
U4_GGAA(X, Y, Z, p_out_ga(X, X1)) → U5_GGAA(X, Y, Z, minus_in_gaa(X1, Y, Z))
U4_GGAA(X, Y, Z, p_out_ga(X, X1)) → MINUS_IN_GAA(X1, Y, Z)
minus_in_gaa(X, Y, Z) → U2_gaa(X, Y, Z, le_in_gaa(X, Y, B))
le_in_gaa(0, Y, true) → le_out_gaa(0, Y, true)
le_in_gaa(s(X), 0, false) → le_out_gaa(s(X), 0, false)
le_in_gaa(s(X), s(Y), B) → U1_gaa(X, Y, B, le_in_gaa(X, Y, B))
U1_gaa(X, Y, B, le_out_gaa(X, Y, B)) → le_out_gaa(s(X), s(Y), B)
U2_gaa(X, Y, Z, le_out_gaa(X, Y, B)) → U3_gaa(X, Y, Z, if_in_ggaa(B, X, Y, Z))
if_in_ggaa(true, X, Y, 0) → if_out_ggaa(true, X, Y, 0)
if_in_ggaa(false, X, Y, s(Z)) → U4_ggaa(X, Y, Z, p_in_ga(X, X1))
p_in_ga(0, 0) → p_out_ga(0, 0)
p_in_ga(s(X), X) → p_out_ga(s(X), X)
U4_ggaa(X, Y, Z, p_out_ga(X, X1)) → U5_ggaa(X, Y, Z, minus_in_gaa(X1, Y, Z))
U5_ggaa(X, Y, Z, minus_out_gaa(X1, Y, Z)) → if_out_ggaa(false, X, Y, s(Z))
U3_gaa(X, Y, Z, if_out_ggaa(B, X, Y, Z)) → minus_out_gaa(X, Y, Z)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
MINUS_IN_GAA(X, Y, Z) → U2_GAA(X, Y, Z, le_in_gaa(X, Y, B))
MINUS_IN_GAA(X, Y, Z) → LE_IN_GAA(X, Y, B)
LE_IN_GAA(s(X), s(Y), B) → U1_GAA(X, Y, B, le_in_gaa(X, Y, B))
LE_IN_GAA(s(X), s(Y), B) → LE_IN_GAA(X, Y, B)
U2_GAA(X, Y, Z, le_out_gaa(X, Y, B)) → U3_GAA(X, Y, Z, if_in_ggaa(B, X, Y, Z))
U2_GAA(X, Y, Z, le_out_gaa(X, Y, B)) → IF_IN_GGAA(B, X, Y, Z)
IF_IN_GGAA(false, X, Y, s(Z)) → U4_GGAA(X, Y, Z, p_in_ga(X, X1))
IF_IN_GGAA(false, X, Y, s(Z)) → P_IN_GA(X, X1)
U4_GGAA(X, Y, Z, p_out_ga(X, X1)) → U5_GGAA(X, Y, Z, minus_in_gaa(X1, Y, Z))
U4_GGAA(X, Y, Z, p_out_ga(X, X1)) → MINUS_IN_GAA(X1, Y, Z)
minus_in_gaa(X, Y, Z) → U2_gaa(X, Y, Z, le_in_gaa(X, Y, B))
le_in_gaa(0, Y, true) → le_out_gaa(0, Y, true)
le_in_gaa(s(X), 0, false) → le_out_gaa(s(X), 0, false)
le_in_gaa(s(X), s(Y), B) → U1_gaa(X, Y, B, le_in_gaa(X, Y, B))
U1_gaa(X, Y, B, le_out_gaa(X, Y, B)) → le_out_gaa(s(X), s(Y), B)
U2_gaa(X, Y, Z, le_out_gaa(X, Y, B)) → U3_gaa(X, Y, Z, if_in_ggaa(B, X, Y, Z))
if_in_ggaa(true, X, Y, 0) → if_out_ggaa(true, X, Y, 0)
if_in_ggaa(false, X, Y, s(Z)) → U4_ggaa(X, Y, Z, p_in_ga(X, X1))
p_in_ga(0, 0) → p_out_ga(0, 0)
p_in_ga(s(X), X) → p_out_ga(s(X), X)
U4_ggaa(X, Y, Z, p_out_ga(X, X1)) → U5_ggaa(X, Y, Z, minus_in_gaa(X1, Y, Z))
U5_ggaa(X, Y, Z, minus_out_gaa(X1, Y, Z)) → if_out_ggaa(false, X, Y, s(Z))
U3_gaa(X, Y, Z, if_out_ggaa(B, X, Y, Z)) → minus_out_gaa(X, Y, Z)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
LE_IN_GAA(s(X), s(Y), B) → LE_IN_GAA(X, Y, B)
minus_in_gaa(X, Y, Z) → U2_gaa(X, Y, Z, le_in_gaa(X, Y, B))
le_in_gaa(0, Y, true) → le_out_gaa(0, Y, true)
le_in_gaa(s(X), 0, false) → le_out_gaa(s(X), 0, false)
le_in_gaa(s(X), s(Y), B) → U1_gaa(X, Y, B, le_in_gaa(X, Y, B))
U1_gaa(X, Y, B, le_out_gaa(X, Y, B)) → le_out_gaa(s(X), s(Y), B)
U2_gaa(X, Y, Z, le_out_gaa(X, Y, B)) → U3_gaa(X, Y, Z, if_in_ggaa(B, X, Y, Z))
if_in_ggaa(true, X, Y, 0) → if_out_ggaa(true, X, Y, 0)
if_in_ggaa(false, X, Y, s(Z)) → U4_ggaa(X, Y, Z, p_in_ga(X, X1))
p_in_ga(0, 0) → p_out_ga(0, 0)
p_in_ga(s(X), X) → p_out_ga(s(X), X)
U4_ggaa(X, Y, Z, p_out_ga(X, X1)) → U5_ggaa(X, Y, Z, minus_in_gaa(X1, Y, Z))
U5_ggaa(X, Y, Z, minus_out_gaa(X1, Y, Z)) → if_out_ggaa(false, X, Y, s(Z))
U3_gaa(X, Y, Z, if_out_ggaa(B, X, Y, Z)) → minus_out_gaa(X, Y, Z)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
LE_IN_GAA(s(X), s(Y), B) → LE_IN_GAA(X, Y, B)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
LE_IN_GAA(s(X)) → LE_IN_GAA(X)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U2_GAA(X, Y, Z, le_out_gaa(X, Y, B)) → IF_IN_GGAA(B, X, Y, Z)
MINUS_IN_GAA(X, Y, Z) → U2_GAA(X, Y, Z, le_in_gaa(X, Y, B))
U4_GGAA(X, Y, Z, p_out_ga(X, X1)) → MINUS_IN_GAA(X1, Y, Z)
IF_IN_GGAA(false, X, Y, s(Z)) → U4_GGAA(X, Y, Z, p_in_ga(X, X1))
minus_in_gaa(X, Y, Z) → U2_gaa(X, Y, Z, le_in_gaa(X, Y, B))
le_in_gaa(0, Y, true) → le_out_gaa(0, Y, true)
le_in_gaa(s(X), 0, false) → le_out_gaa(s(X), 0, false)
le_in_gaa(s(X), s(Y), B) → U1_gaa(X, Y, B, le_in_gaa(X, Y, B))
U1_gaa(X, Y, B, le_out_gaa(X, Y, B)) → le_out_gaa(s(X), s(Y), B)
U2_gaa(X, Y, Z, le_out_gaa(X, Y, B)) → U3_gaa(X, Y, Z, if_in_ggaa(B, X, Y, Z))
if_in_ggaa(true, X, Y, 0) → if_out_ggaa(true, X, Y, 0)
if_in_ggaa(false, X, Y, s(Z)) → U4_ggaa(X, Y, Z, p_in_ga(X, X1))
p_in_ga(0, 0) → p_out_ga(0, 0)
p_in_ga(s(X), X) → p_out_ga(s(X), X)
U4_ggaa(X, Y, Z, p_out_ga(X, X1)) → U5_ggaa(X, Y, Z, minus_in_gaa(X1, Y, Z))
U5_ggaa(X, Y, Z, minus_out_gaa(X1, Y, Z)) → if_out_ggaa(false, X, Y, s(Z))
U3_gaa(X, Y, Z, if_out_ggaa(B, X, Y, Z)) → minus_out_gaa(X, Y, Z)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U2_GAA(X, Y, Z, le_out_gaa(X, Y, B)) → IF_IN_GGAA(B, X, Y, Z)
MINUS_IN_GAA(X, Y, Z) → U2_GAA(X, Y, Z, le_in_gaa(X, Y, B))
U4_GGAA(X, Y, Z, p_out_ga(X, X1)) → MINUS_IN_GAA(X1, Y, Z)
IF_IN_GGAA(false, X, Y, s(Z)) → U4_GGAA(X, Y, Z, p_in_ga(X, X1))
le_in_gaa(0, Y, true) → le_out_gaa(0, Y, true)
le_in_gaa(s(X), 0, false) → le_out_gaa(s(X), 0, false)
le_in_gaa(s(X), s(Y), B) → U1_gaa(X, Y, B, le_in_gaa(X, Y, B))
p_in_ga(0, 0) → p_out_ga(0, 0)
p_in_ga(s(X), X) → p_out_ga(s(X), X)
U1_gaa(X, Y, B, le_out_gaa(X, Y, B)) → le_out_gaa(s(X), s(Y), B)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
U4_GGAA(p_out_ga(X1)) → MINUS_IN_GAA(X1)
IF_IN_GGAA(false, X) → U4_GGAA(p_in_ga(X))
U2_GAA(X, le_out_gaa(B)) → IF_IN_GGAA(B, X)
MINUS_IN_GAA(X) → U2_GAA(X, le_in_gaa(X))
le_in_gaa(0) → le_out_gaa(true)
le_in_gaa(s(X)) → le_out_gaa(false)
le_in_gaa(s(X)) → U1_gaa(le_in_gaa(X))
p_in_ga(0) → p_out_ga(0)
p_in_ga(s(X)) → p_out_ga(X)
U1_gaa(le_out_gaa(B)) → le_out_gaa(B)
le_in_gaa(x0)
p_in_ga(x0)
U1_gaa(x0)
The following rules are removed from R:
MINUS_IN_GAA(X) → U2_GAA(X, le_in_gaa(X))
Used ordering: POLO with Polynomial interpretation [25]:
p_in_ga(s(X)) → p_out_ga(X)
le_in_gaa(0) → le_out_gaa(true)
le_in_gaa(s(X)) → le_out_gaa(false)
le_in_gaa(s(X)) → U1_gaa(le_in_gaa(X))
U1_gaa(le_out_gaa(B)) → le_out_gaa(B)
POL(0) = 0
POL(IF_IN_GGAA(x1, x2)) = x1 + x2
POL(MINUS_IN_GAA(x1)) = 2 + 2·x1
POL(U1_gaa(x1)) = 2 + x1
POL(U2_GAA(x1, x2)) = x1 + x2
POL(U4_GGAA(x1)) = 1 + x1
POL(false) = 2
POL(le_in_gaa(x1)) = 1 + x1
POL(le_out_gaa(x1)) = x1
POL(p_in_ga(x1)) = 1 + x1
POL(p_out_ga(x1)) = 1 + 2·x1
POL(s(x1)) = 2 + 2·x1
POL(true) = 0
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ DependencyGraphProof
U4_GGAA(p_out_ga(X1)) → MINUS_IN_GAA(X1)
IF_IN_GGAA(false, X) → U4_GGAA(p_in_ga(X))
U2_GAA(X, le_out_gaa(B)) → IF_IN_GGAA(B, X)
p_in_ga(0) → p_out_ga(0)
le_in_gaa(x0)
p_in_ga(x0)
U1_gaa(x0)